package uploadFile

import (
	"context"
	"errors"
	"gf-example/internal/model"
	"gf-example/internal/service"
	"github.com/gogf/gf/v2/text/gstr"
)

type sUploadFile struct {
}

func init() {
	service.RegisterUploadImg(New())
}

func New() *sUploadFile {

	return &sUploadFile{}
}
func (s *sUploadFile) UploadImg(ctx context.Context, in *model.FileUploadInPut) (out *model.FileUploadOutPut, err error) {
	filename := in.File.Filename
	suffix := gstr.StrEx(filename, ".")
	if suffix == "png" || suffix == "PNG" || suffix == "jpg" || suffix == "JPG" {
		//本来配置里面可以限制文件大小，但是官方提示的不够优雅,有些傻逼前端还以为是后台挂了。所以自己来判断文件大小
		//注意：在配置文件里面设置大一点，让所有大文件都可以进到这一步来，如果配置文件里面设置太小,在路由校验的时候就拦截了,但是提示给前端不友好。
		//这里注意 in.File.Size里面是以字节为单位的，所以 1MB 等于 1 * 1024 * 1024
		if in.File.Size > 1048576 {
			return nil, errors.New("文件过大,请上传≤1MB的文件,因为太大容易造成服务器卡顿")
		}
		imgName, err1 := in.File.Save("./img/"+in.Type+"/", true)
		if err1 != nil {
			return nil, errors.New("保存文件失败：" + err1.Error())
		}

		/*		ret := &model.FileUploadInPut{
				FileName: imgName,
				FileUrl:  "./img/" + in.Type + "/" + imgName,
				UserId:   in.UserId,
			}*/
		//将图片路径插入到数据库中

		//这里是将保存过来的图片资料返回给前端、其实也可以不返回
		return &model.FileUploadOutPut{
			Id:         1,
			FileName:   imgName,
			FileUrl:    "/img/" + in.Type + "/" + imgName,
			CreateTime: nil,
			UpdateTime: nil,
		}, nil
	} else {
		return nil, errors.New("文件扩展名不对")
	}
}
